/**
 * 给你一棵 完整二叉树的根，这棵树有以下特征：
 *
 * 叶子节点要么值为0要么值为1，其中0 表示False，1 表示True。
 * 非叶子节点 要么值为 2要么值为 3，其中2表示逻辑或OR ，3表示逻辑与AND。
 * 计算一个节点的值方式如下：
 *
 * 如果节点是个叶子节点，那么节点的 值为它本身，即True或者False。
 * 否则，计算个孩子的节点值，然后将该节点的运算符对两个孩子值进行 运算。
 * 返回根节点root的布尔运算值。
 *
 * 完整二叉树是每个节点有 0个或者 2个孩子的二叉树。
 *
 * 叶子节点是没有孩子的节点。
 *https://leetcode.cn/problems/evaluate-boolean-binary-tree/
 */
class EvaluateTree {
    public boolean evaluateTree(TreeNode root) {
        int val=dfs(root);
        if(val==1){
            return true;
        }else{
            return false;
        }
    }
    public int dfs(TreeNode root){
        if(root==null){
            return 0;
        }
        int left=dfs(root.left);
        int right=dfs(root.right);
        if(root.val==1||root.val==0){
            return root.val;
        }
        else if(root.val==2){
            int val=left+right;
           if(val>=1){
               return 1;
           }else{
               return 0;
           }
        }else{
            int val=left+right;
            if(val==2){
                return 1;
            }else{
                return 0;
            }
        }
    }
}